home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
snip0493.zip
/
CDIR.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-04-05
|
3KB
|
128 lines
/*
** CDIR.C
**
** Written By: Lynn R. Lively
** Date Written: 9/18/91
**
** Purpose: To provide a change directory facility that will cross
** drive/partition boundries. Never did understand why
** MSDOS cd wouldn't do this already.
**
**-----------------------------------------------------------------
** I hereby place this work into the Public Domain. It may be used
** for any legal purpose public or private. Use this material at
** your own risk. I accept no responsibility for the accuracy or
** usability of the information contained herein. Neither do I
** accept liability for any possible damage caused by use of this
** material. However, should you have a problem, question, or
** suggestion I would be glad to help in any way that I can. You
** can reach me at (H) 713-893-7875 or (W) 713-591-6611 x 149.
**-----------------------------------------------------------------
*/
/*
** Change History
**
** Rev # Date By Description of change
** 1.00 | 09/18/91 | LRL | Original Version
** 1.01 | 09/18/91 | RBS | Added MSC, ZTC support for SNIPPETS
**-----------------------------------------------------------------
** Directory of initials:
** Initials Name
** LRL Lynn R. Lively
** RBS Bob Stout
*/
#include <stdio.h>
#include <string.h>
#ifdef __TURBOC__
#include <dir.h>
#else
#include <dos.h>
#include <direct.h>
#ifdef __ZTC__
#define _dos_getdrive(d) dos_getdrive(d)
#define _dos_setdrive(d,m) dos_setdrive(d,m)
#define drive_t unsigned
#else
#define drive_t int
#endif
drive_t getdisk(void)
{
drive_t drive;
_dos_getdrive(&drive);
return drive - 1;
}
drive_t setdisk(drive_t drive)
{
drive_t max_drives;
_dos_setdrive(drive + 1, &max_drives);
return max_drives - 1;
}
#endif
main (int argc, char * argv[])
{
int d;
int max_d;
char wk_str[128];
if (argc > 1)
{
strupr (argv[1]);
if (argv[1][1] == ':')
{
/*
** Find out what the maximum drive number can be.
*/
max_d = getdisk ();
max_d = setdisk (max_d);
d = argv[1][0] - 'A';
if (d < max_d)
{
/*
** If the drive specification was valid position to it
** and then do a change directory.
*/
setdisk (d);
chdir (argv[1]);
}
else
{
puts ("Invalid drive specification");
return -1;
}
}
else
{
/*
** If the argument has no drive spec just do a regular
** change directory.
*/
chdir (argv[1]);
}
}
else
{
/*
** If no arguments are passed, return the current working
** directory path just like MSDOS cd does.
*/
puts (getcwd (wk_str, sizeof (wk_str)));
}
return 0;
}